//引入express 
const express=require('express');

const home=require('./router/home');

const cors=require('cors');
// 创建app应用
const app=express();
// 引入cookie-parser帮助解析cookie
const cookieParser=require('cookie-parser');
// 托管静态文件
app.use(express.static('public'));
// 解决跨域
app.use(cors());
// 使用cookie-parser
// cookie 服务器产生 随着请求报文和响应报文在服务器和浏览器之间进行传递
app.use(cookieParser());
app.get('/testCookie',(req,res)=>{
    // console.log(req.cookies);
    // 响应报文中设置的cookie
    // maxAge 过期时间 单位：毫秒
    res.cookie('name','ysn',{maxAge:60*60*1000});
    res.cookie('age',18,{maxAge:60*60*1000});
    res.send('测试cookie');
})
app.get('/cookieTwo',(req,res)=>{
    console.log(req.cookies);
    res.send('测试请求报文传递过来的cookie');
})





const bodyparser=require('body-parser');
// 使用 将post请求体中的参数挂载到req.body中
app.use(bodyparser.urlencoded({extended:true}));
// 引入入口文件
const registerLogin=require('./router/registerLogin');

// 中间件本质就是一个函数  三个参数 req res next
// req request 请求对象
// res response 响应对象
// next 放行 调用下一个中间件 下一个路由
// 作用：当拦截之后可以执行相关的逻辑 修改请求对象 终结reaponse请求 调用下一个中间件
// 下一个路由
// 中间件分为四类：自定义中间件 第三方中间件（例如：bodyparser） 内置的中间（例如：express.static）
// 路由器中间件（用的最多）

// 全局中间件 
app.use('/banner',(req,res,next)=>{
    console.log('ysn很帅');
    // res.send('确实是这样');
    // 需求 对于banner的get请求传参 msg内容 如果msg的内容是ysn很帅 返回
    // banner数据，如果msg内容不是ysn很帅 则返回确实这样
    // http://localhost:8080/banner?msg=ysn很帅 有app.use('/',
    // callback) 不是banner路由 是app.use('/',callback)
    // console.log(req.query);
    // res.send('确实这样');
    if(req.query.msg == 'ysn很帅'){
        req.query.add='好好学习，天天向上';
        // 调用下一个路由
        next();
    }else{
        res.send('确实这样');
    }
    next();  //没有条件直接写next意味着全部放行
})


// 路由
// 分类管理路由 使用路由器分类管理路由
// 有很多个接口 路由 需要分类管理
// 登录注册 首页banner data 四个接口
// login register 一类 放到一个路由器中进行管理
// 首页banner data 一类 供首页使用的接口
// 引入路由器模块
// 应用路由
// 任何文件都要和入口文件产生直接或者间接的联系才能打包到项目中
// 引入路由器模块  应用
app.use(registerLogin);
app.use(home);



// 监听端口号
app.listen(8080,err=>{
    if(!err) console.log('服务器启动成功');
    else console.log(err);
})